Although computers were once isolated and had minimal or little interaction with other computers, computers now interact with a wide variety of other computers through Local Area Networks (LANs), Wide Area Networks (WANs), dial-up connections, and the like. With the wide-spread growth of the Internet, connectivity between computers has become more important and has opened up many new applications and technologies. The growth of large-scale networks, and the wide-spread availability of low-cost personal computers, has fundamentally changed the way that many people work, interact, communicate, and play.
One increasing popular form of networking may generally be referred to as remote presentation systems, which can use protocols such as Remote Desktop Protocol (RDP), Independent Computing Architecture (ICA), and others to share a desktop and other applications with a remote client. Such computing systems typically transmit the keyboard presses and mouse clicks or selections from the client to a server, relaying the screen updates back in the other direction over a network connection (e.g., the Internet). As such, the user has the experience as if their machine is executing the applications locally, when in reality the client device is only sent screenshots of the applications as they appear on the server side.
Among these remote presentation session techniques are a class of techniques referred to as application sharing or window sharing. These techniques permit a first user at a first computer to share one or more windows a second user at a second computer. In many cases, the first user does not want to share with the second user his or her entire desktop, but only these specifically shared windows (hereinafter referred to as “shared windows”). Further, there may also be a problem when an un-shared window partially blocks, or occludes, a shared window. This un-shared window may cause confusion on the part of the second user, who cannot see all of the shared windows, and may see some windows as incomplete.
Previous techniques for sharing windows are based on extracting the windows solely from the rendered computer desktop, then determining from the computer desktop what parts of it correspond to shared windows or applications, and then covering the non-shared regions (like with an opaque pattern) to make the content of that part of the desktop unviewable. That is, these techniques begin with the content of the desktop, from which non-shared areas are hidden. These techniques do not allow for displaying parts of shared windows that are occluded on the desktop (at least partially covered by another window or other graphical object), or displaying alternate representations of both shared and non-shared windows to a recipient (such as that a non-shared window exists, and that is why part of a shared window is occluded).